import json
from datetime import datetime
class timedateEncoder(json.JSONEncoder):
    def default(self, obj):
        print(obj)  #obj就是不能序列化的对象
        o = datetime.strftime(obj,'%Y-%m-%d %H:%M:%S')              
        return o

class timedateDecoder(json.JSONDecoder):
        def decode(self, s):
            obj = json.loads(s)        #s是将要反序列化的整个数剧
            time = obj.pop('time')     #这里是先移除 并得到time
            time = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')              #然后这里对他格式进行处理 将字符串转成datetime
            obj['time'] = time                    #这里在添加进去
            return obj               #这里就是反序列化的整个数据

# 八种基础类型都可以序列话和反序列化   自定义类型 集合  和别的都需要重写JSONEncoder（default）         JSONDecoder（decode）



data = {
    'int':1,
    'float':1.1,
    "str":"str",
    'none':None,
    'list':[1,2,3,4,5,6,7,8,9,10],
    'tuple':(1,2,3,4,5,6,7,8,9,10),
    'bool':True,
    'date':{'year':2021,'month':12},

    "time": datetime.now(),

}

dump = json.dumps(data,cls=timedateEncoder)
print(dump)

load = json.loads(dump,cls=timedateDecoder)
print(load)